www.gusucode.com > matlab神经网络原理与实例精解 本书源文件 > 第13章 神经网络应用实例/BP神经网络实现图像压缩/bp_imageCompress.m

    % bp_imageCompress.m
% 基于BP神经网络的图像压缩

%% 清理
clc
clear all
rng(0)

%% 压缩率控制
K=4;
N=2;
row=256;
col=256;

%% 数据输入
I=imread('d:\lena.bmp');

% 统一将形状转为row*col
I=imresize(I,[row,col]);

%% 图像块划分,形成K^2*N矩阵
P=block_divide(I,K);

%% 归一化
P=double(P)/255;

%% 建立BP神经网络
net=feedforwardnet(N,'trainlm');
T=P;
net.trainParam.goal=0.001;
net.trainParam.epochs=500;
tic
net=train(net,P,T);
toc

%% 保存结果
com.lw=net.lw{2};
com.b=net.b{2};
[~,len]=size(P); % 训练样本的个数
com.d=zeros(N,len);
for i=1:len
    com.d(:,i)=tansig(net.iw{1}*P(:,i)+net.b{1});
end
minlw= min(com.lw(:));
maxlw= max(com.lw(:));
com.lw=(com.lw-minlw)/(maxlw-minlw);
minb= min(com.b(:));
maxb= max(com.b(:));
com.b=(com.b-minb)/(maxb-minb);
maxd=max(com.d(:));
mind=min(com.d(:));
com.d=(com.d-mind)/(maxd-mind);

com.lw=uint8(com.lw*63);
com.b=uint8(com.b*63);
com.d=uint8(com.d*63);

save comp com minlw maxlw minb maxb maxd mind